Introducción
Los casos de uso son documentos narrativos que describen las secuencias de eventos de distintos actores (agentes externos) que utilizan un sistema para completar un proceso. Son casos de utilización de un sistema y describen posibles escenarios de interacción de los agente externos con el sistema. Cada escenario es una secuencia posible. Un caso de uso es un conjunto de escenarios.
Se desarrollan durante la etapa de análisis y sirven para mejorar la comprensión de los requerimientos y facilitar la comunicación entre los distintos analistas, así como la transición del análisis al diseño. Son independientes del método de diseño y lenguaje que se utilice para la implementación. También se utilizan como herramienta para el relevamiento de los requisitos.
En este documento se muestra los elementos principales de un caso de uso y las distintas relaciones que pueden existir entre casos de usos. Además se presenta algunos consejos prácticos y consideraciones a tener en cuenta al momento de desarrollar los casos de uso.
Adicionalmente se muestra el desarrollo completo de un caso de uso, que sirve para ejemplificar los distintos conceptos que se manejan a través del documento.
El actor es un agente externo al sistema que participa en la historia de un caso de uso y está representado por el papel que cumple dentro del caso de uso. Los papeles son generalmente desempeñados por seres humanos, usuarios directos del sistema, pero este no es siempre el caso, un papel puede ser desempeñado por otro sistema.
Un caso de uso describe una forma de uso del sistema de principio a fin y debe especificarse claramente cual es su objetivo, las funcionalidades que el caso de uso quiere describir.
Describe condiciones que debe cumplir el sistema para que se pueda iniciar el caso de uso. Impone restricciones sobre el estado previo del sistema. Las precondiciones no se verifican durante el caso de uso y se asume que se cumplen durante todo el caso de uso.
Las poscondiciones describen el estado del sistema luego de la ejecución exitosa del caso de uso. Indican lo que se tiene que cumplir luego de que el caso de uso termina exitosamente.
Es una descripción breve, a alto nivel, del caso de uso y del flujo de acciones del mismo. Su propósito es dar una idea de las acciones que se van a realizar en el caso de uso. No se debe hacer mención a decisiones de diseño ni a casos particulares de la ejecución.
El caso de uso expandido detalla la funcionalidad más a fondo, desglosándola en una secuencia determinada de pasos que describen el flujo de acciones entre cada uno de los actores y el sistema.
El flujo principal del caso de uso muestra la secuencia de pasos más común que se lleva a cabo para la ejecución exitosa del caso de uso. Se debe especificar un único flujo principal por caso de uso. La secuencia de pasos debe estar numerada para que pueda se pueda hacer referencia a un paso en particular dentro del flujo.
Además del flujo principal, un caso de uso puede tener varios flujos alternativos. Un flujo alternativo o secundario describe un escenario alternativo al principal. Permiten mostrar casos particulares y cómo el sistema maneja los distintos errores.
Para ejemplificar suponemos un sistema que le permite al cliente de un banco realizar tareas bancarias desde la casa. El sistema corre localmente en la máquina del usuario y se comunica con el servidor del banco para realizar consultas y efectuar operaciones.
Consideremos el caso de uso “Realizar Transferencia”, que permite al usuario realizar una transferencia entre 2 cuentas. En este caso de uso participan 2 actores, agentes externos al sistema: el usuario de la aplicación y el banco.
El flujo principal es el siguiente:
Aquí se muestra el escenario típico de éxito del caso de uso y por eso se identificó a este flujo como el principal. Adicionalmente, hay otros escenarios posibles y errores que pueden surgir.
Un escenario alternativo podría ser que el usuario no desee seleccionar la cuenta de origen de las cuentas que tiene guardadas en el sistema, sino que desea ingresar manualmente un número de cuenta. Para eso se genera el siguiente flujo alternativo en el punto 4 del flujo principal:
10.A. El usuario desea ingresar manualmente el número de cuenta origen.
10.A.1. Usuario: selecciona ingresar manualmente el número de cuenta.
10.A.2. Sistema: pide al usuario que ingrese número de cuenta y código del banco.
10.A.3. Usuario: ingresa número de cuenta y código del banco.
10.A.4. Vuelve al punto 5.
El formato de un flujo alternativo es el siguiente:
También se utilizan flujos alternativos para especificar cómo se manejan los posibles errores que pueden surgir.
En este caso consideraremos el error que puede surgir en la comunicación con el banco.
16.A. Existe un error en la comunicación con el banco.
Vemos que, al especificarse en el último paso "Fin CU", el caso de uso se termina al terminar el flujo alternativo.
Sobre el final de la guía se encuentra el desarrollo completo del caso de uso anterior para que se utilice como ejemplo.
Se pueden identificar distintas relaciones entre los casos de uso.
La relación de inclusión es la más común entre casos de uso. Permite definir casos de uso que «ejecuten» otros casos de uso.
Al caso de uso que incluye a otro se le llama caso base y al otro se le denomina caso incluido. Se puede incluir otros casos de uso tanto en el flujo principal como en algún flujo alternativo.
Cuando se llega al punto dentro del caso de uso base en el cual se incluye a otro, se ejecuta en su totalidad el caso de uso incluido y luego su finalizada la ejecución, se continúa en el punto siguiente del caso base.
Sólo se continúa la ejecución del caso base si el caso incluido se ejecutó con éxito, en caso de que falle, falla el caso base también.
Cabe notar que el caso de uso incluido no tiene por qué tener conocimiento de los casos de uso que lo incluyen.
En el caso del sistema mencionado en la sección anterior, se requiere que el usuario indique su nombre de usuario y contraseña para autentificarse frente al banco. Entonces se podría crear un caso de uso “Autentificar” y modificar el caso de uso anterior para incluir al caso de uso de autentificarse:
Una vez que se llega al paso 2 se ejecuta el caso de uso autentificar y sólo si este se ejecuta con éxito, o sea que el usuario logra efectivamente autentificarse, se continúa con el caso de uso de realizar transferencias.
La relación de extensión entre casos de uso se refiere a un fragmento de un caso de uso que extiende, es decir, agrega comportamiento, a otro caso de uso.
Se utilizan para describir escenarios alternativos complejos, que sería demasiado complicado de explicar mediante flujos alternativos o para destacar flujos alternativos.
Solo se ejecuta en caso de que se cumpla una condición particular en algún punto específico del caso de uso a extender. A ese punto se le llama punto de extensión.
En esta relación, el caso de uso extendido conoce al caso de uso que lo extiende y viceversa.
Cuando se llega al punto de extensión se ejecuta el caso de uso que extiende y, en caso de una ejecución exitosa, se continúa la ejecución del caso base en el punto siguiente al punto de extensión.
La relación de generalización nos permite definir casos en los cuales tenemos más de un escenario principal para un caso de uso, que comparten cosas en común. Lo que se hace en este caso es crear un caso de uso abstracto y crear distintos casos de uso (uno por cada uno de esos escenarios que mencionamos anteriormente) que hereden del caso de uso abstracto.
Los casos de usos hijos heredan del padre los escenarios, puntos de extensión y relaciones a la vez que pueden definir o enriquecer con nuevos flujos y acciones al caso de uso padre.
Se tiene que tener en cuenta las siguientes consideraciones a la hora de desarrollar los casos de uso en el marco de un proceso de desarrollo iterativo e incremental: